package main

import (
	"bufio"
	"fmt"
	"net"
)

// 一个TCP服务端可以同时连接很多个客户端，Go语言中创建多个goroutine实现并发非常方便和高效，所以可以每建立一次链接就创建一个goroutine去处理。
//TCP服务端程序的处理流程：
//
//监听端口
//接收客户端请求建立链接
//创建goroutine处理链接
//TCP服务端：

func process(conn net.Conn) {
	defer conn.Close()
	var buf [128]byte
	for {
		br := bufio.NewReader(conn)
		n, err := br.Read(buf[:])
		if err != nil {
			fmt.Println("读取错误:", err)
			break
		}
		fmt.Println("收到数据:", string(buf[:n]))
		_, err = conn.Write([]byte("服务端已收到信息:" + string(buf[:n])))
		if err != nil {
			fmt.Println("发送数据错误:", err)
			break
		}
	}
}

func main34() {
	listen, err := net.Listen("tcp", "127.0.0.1:8001")
	if err != nil {
		fmt.Println("监听失败:", err)
		return
	}
	//defer listen.Close()
	fmt.Println("服务端启动成功，等待连接...")
	for {
		conn, err := listen.Accept() //获取连接
		fmt.Println("新的连接:", conn.RemoteAddr().String())
		if err != nil {
			fmt.Println("获取连接错误:", err)
			continue
		}
		go process(conn)
	}
}
